// pages/add-address/add-address.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        name: '谷总',
        phone: '13813357897',
        region: '北京市 北京市 东城区',
        province: '北京市',
        city: '北京市',
        district: '东城区',
        detailAddress: '广州市天河区珠江新城',
        houseNumber: '华夏路10号',
        selectedTag: 'home',
        isDefault: true,
        canSave: false,

        // 地图相关数据
        showMapModal: false,
        mapLatitude: 39.9042, // 默认北京
        mapLongitude: 116.4074,
        currentMapAddress: '',
        markers: []
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.checkCanSave();
        wx.setNavigationBarTitle({
            title: '新增地址'
        })
    },
    // 返回上一页
    goBack: function () {
        wx.navigateBack();
    },

    // 输入收货人
    onNameInput: function (e) {
        this.setData({ name: e.detail.value });
        this.checkCanSave();
    },

    // 输入手机号
    onPhoneInput: function (e) {
        this.setData({ phone: e.detail.value });
        this.checkCanSave();
    },

    // 选择地区
    onRegionChange: function (e) {
        const region = e.detail.value.join(' '),
            province = e.detail.value[0],
            city = e.detail.value[1],
            district = e.detail.value[2];
        debugger
        this.setData({ region });
        this.checkCanSave();
    },

    // 输入详细地址
    onDetailAddressInput: function (e) {
        this.setData({ detailAddress: e.detail.value });
        this.checkCanSave();
    },

    // 输入门牌号
    onHouseNumberInput: function (e) {
        this.setData({ houseNumber: e.detail.value });
    },

    // 选择标签
    selectTag: function (e) {
        const tag = e.currentTarget.dataset.tag;
        this.setData({ selectedTag: tag });
    },

    // 切换默认地址
    onDefaultChange: function (e) {
        this.setData({ isDefault: e.detail.value });
    },

    // 检查是否可以保存
    checkCanSave: function () {
        const { name, phone, region, detailAddress } = this.data;
        const canSave = name && phone && region && detailAddress;
        this.setData({ canSave });
    },

    // 获取当前位置
    getCurrentLocation: function () {
        wx.getLocation({
            type: 'gcj02',
            success: (res) => {
                this.setData({
                    mapLatitude: res.latitude,
                    mapLongitude: res.longitude
                });
                this.reverseGeocode(res.latitude, res.longitude);
            },
            fail: (err) => {
                console.log('获取位置失败', err);
                wx.showToast({
                    title: '获取位置失败',
                    icon: 'none'
                });
            }
        });
    },

    // 点击定位按钮
    getLocation: function () {
        wx.showLoading({
            title: '定位中...',
        });

        wx.getLocation({
            type: 'gcj02',
            success: (res) => {
                wx.hideLoading();
                this.setData({
                    mapLatitude: res.latitude,
                    mapLongitude: res.longitude,
                    showMapModal: true
                });
                this.updateMapMarker();
                this.reverseGeocode(res.latitude, res.longitude);
            },
            fail: (err) => {
                wx.hideLoading();
                console.log('获取位置失败', err);
                if (err.errMsg.includes('auth deny')) {
                    this.showLocationAuthModal();
                } else {
                    wx.showToast({
                        title: '获取位置失败',
                        icon: 'none'
                    });
                }
            }
        });
    },

    // 显示位置授权弹窗
    showLocationAuthModal: function () {
        wx.showModal({
            title: '位置授权',
            content: '需要获取您的位置信息才能使用定位功能，请在设置中开启位置权限',
            confirmText: '去设置',
            success: (res) => {
                if (res.confirm) {
                    wx.openSetting({
                        success: (settingRes) => {
                            if (settingRes.authSetting['scope.userLocation']) {
                                this.getLocation();
                            }
                        }
                    });
                }
            }
        });
    },

    // 更新地图标记
    updateMapMarker: function () {
        const markers = [{
            id: 1,
            latitude: this.data.mapLatitude,
            longitude: this.data.mapLongitude,
            iconPath: '/images/location-marker.png',
            width: 30,
            height: 30
        }];
        this.setData({ markers });
    },

    // 地图区域变化
    onMapRegionChange: function (e) {
        if (e.type === 'end') {
            const { centerLocation } = e;
            if (centerLocation) {
                this.setData({
                    mapLatitude: centerLocation.latitude,
                    mapLongitude: centerLocation.longitude
                });
                this.updateMapMarker();
                this.reverseGeocode(centerLocation.latitude, centerLocation.longitude);
            }
        }
    },

    // 地图点击事件
    onMapTap: function (e) {
        const { latitude, longitude } = e.detail;
        this.setData({
            mapLatitude: latitude,
            mapLongitude: longitude
        });
        this.updateMapMarker();
        this.reverseGeocode(latitude, longitude);
    },

    // 逆地理编码 - 将坐标转换为地址
    reverseGeocode: function (latitude, longitude) {
        // 这里应该调用微信的逆地理编码服务
        // 由于微信小程序没有直接提供逆地理编码API，这里使用模拟数据
        const mockAddress = this.getMockAddress(latitude, longitude);
        this.setData({
            currentMapAddress: mockAddress
        });
    },

    // 模拟获取地址信息（实际项目中应该调用后端服务）
    getMockAddress: function (lat, lng) {
        // 这里可以根据坐标返回模拟的地址信息
        const addresses = [
            '北京市朝阳区建国门外大街1号',
            '上海市浦东新区陆家嘴环路1000号',
            '广州市天河区珠江新城华夏路10号',
            '深圳市南山区深南大道10000号',
            '杭州市西湖区文一西路969号'
        ];

        // 简单根据坐标哈希选择一个地址
        const index = Math.abs(Math.floor(lat * lng * 1000)) % addresses.length;
        return addresses[index];
    },

    // 确认选择位置
    confirmLocation: function () {
        this.setData({
            detailAddress: this.data.currentMapAddress,
            showMapModal: false
        });
        this.checkCanSave();
    },

    // 隐藏地图弹窗
    hideMapModal: function () {
        this.setData({
            showMapModal: false
        });
    },

    // 保存地址
    saveAddress: function () {
        if (!this.data.canSave) {
            wx.showToast({
                title: '请填写完整信息',
                icon: 'none'
            });
            return;
        }

        // 验证手机号
        if (!this.validatePhone(this.data.phone)) {
            wx.showToast({
                title: '请输入正确的手机号',
                icon: 'none'
            });
            return;
        }

        const address = {
            // id: Date.now(),
            name: this.data.name,
            phone: this.data.phone,
            region: this.data.region,
            detailAddress: this.data.detailAddress,
            houseNumber: this.data.houseNumber,
            fullAddress: `${this.data.region} ${this.data.detailAddress} ${this.data.houseNumber}`,
            selectedTag: this.data.selectedTag,
            isDefault: this.data.isDefault,
            latitude: this.data.mapLatitude,
            longitude: this.data.mapLongitude,
            province: this.data.province,
            city: this.data.city,
            district: this.data.district,
        };
        // debuggerhttps://localhost:44311/api/Zxrh.Xncf.Xxgmall/AddressAppService/Xncf.Xxgmall_AddressAppService.AddOrUpdateAddressAsync
                 //https://localhost:44311/api/Zxrh.Xncf.Xxgmall/AddressAppService/Xncf.Xxgmall_AddressAppService.AddOrUpdateAddressAsync
        // // 保存到本地存储
        // let addressList = wx.getStorageSync('addressList') || [];

        // // 如果设为默认地址，取消其他默认地址
        // if (address.isDefault) {
        //     addressList.forEach(addr => addr.isDefault = false);
        // }

        // addressList.push(address);
        // wx.setStorageSync('addressList', addressList);
      this.AddOrUpdateAddressAsync(address).then((res)=>{
          if(res.data){
              console.log(res.data)
            wx.showToast({
                title: '保存成功',
                icon: 'success'
            });
            const pages = getCurrentPages();
            const prevPage = pages[pages.length - 2];
            if (prevPage) {
                prevPage.setData({
                    selectedAddress: address
                });
            }
            wx.navigateBack();
          }
      })
        

        // 返回确认订单页面并传递选择的地址
        // setTimeout(() => {
        //     const pages = getCurrentPages();
        //     const prevPage = pages[pages.length - 2];
        //     if (prevPage) {
        //         prevPage.setData({
        //             selectedAddress: address
        //         });
        //     }
        //     wx.navigateBack();
        // }, 1500);
    },
    AddOrUpdateAddressAsync(param) {
        return wx.Http.post("/AddressAppService/Xncf.Xxgmall_AddressAppService.AddOrUpdateAddressAsync", param)
    },
    // 验证手机号
    validatePhone: function (phone) {
        return /^1[3-9]\d{9}$/.test(phone);
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})